package com.lxl.todo;
/**
* 和为 K 的子数组
* 给你一个整数数组 nums 和一个整数 k ，请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
* 输入：nums = [1,1,1], k = 2
  输出：2
* */
import java.util.HashMap;

class Solution9{
    public int subarraySum(int[] nums, int k) {
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0, 1);
        int preSum = 0;
        int count = 0;
        for(int i = 0; i < nums.length; i++) {
            preSum += nums[i];
            if (map.containsKey(preSum - k)) {
                count += map.get(preSum - k);
            }
            map.put(preSum, map.getOrDefault(preSum, 0) + 1);
        }
        return count;
    }
    public static void main(String[] args) {
        Solution9 solution9 = new Solution9();
        int i = solution9.subarraySum(new int[]{1,2,3}, 3);
        System.out.println("i = " + i);
    }
}

